
package com.x52im.rbchat.logic.chat_root.impl;

import android.app.Activity;
import android.util.Log;

import com.eva.android.widget.ProgressDialogTimmer;
import com.eva.android.widget.WidgetUtils;
import com.x52im.rbchat.R;

import java.util.Observer;

/**
 * 消息"撤回"功能对应的进度提示框（此进度框将在撤回指令发出时显示，撤回指令的ACK应答收到时取肖显示）。
 *
 * @author JackJiang
 * @since 7.3
 */
public class MessageRevokingDialogProgess extends ProgressDialogTimmer {

    private final static String TAG = MessageRevokingDialogProgess.class.getSimpleName();

    /** 消息撤回指令应答超时间 */
    public final static int ACK_DELAY = 10 * 1000;
    /** 被撤回消息对应的指纹码（如果是群聊，则此指纹码实际指的是父指纹码——即fingerPrintOfParent） */
    private String fpForMessage = null;

    public MessageRevokingDialogProgess(Activity parentActivity){
        super(parentActivity, "消息撤回中", ACK_DELAY);
    }

    public String getFpForMessage() {
        return fpForMessage;
    }

    /**
     * 显示进度提示框。
     *
     * @param fpForMessage 被撤回消息对应的指纹码（如果是群聊，则此指纹码实际指的是父指纹码——即fingerPrintOfParent）
     */
    public void show(String fpForMessage){
        // 如果已经显示则强制取消显示
        if(this.isShowing()){
            this.hide(true, null);
        }

        this.fpForMessage = fpForMessage;

        // 当定时时间到来时，要通知的观察者
        Observer obsForTimerProgress = (observable, o) -> {
            WidgetUtils.showWithDialog(parentActivity, parentActivity.getString(R.string.general_error), "消息撤回失败，请稍后重试！");
            hide(true, null);
        };
        // 设置定时观察者
		this.setObsrver(obsForTimerProgress);
		// 显示进度提示框
		this.showProgressDialogForPairing(true);
    }

    /**
     * 隐藏进度提示框的显示。
     *
     * @param enforce true表示无条件强制进度提示框的显示，false表示只有当 fpForMessage 参数与当前正在撤回的指纹码一致才会取消显示哦
     * @param fpForMessage 被撤回消息对应的指纹码（如果是群聊，则此指纹码实际指的是父指纹码——即fingerPrintOfParent）
     * @return
     */
    public boolean hide(boolean enforce, String fpForMessage){
        try{
            Log.i(TAG, "正在hide进度提示框（enforce="+enforce+", fpForMessage="+fpForMessage+"）。。。");
            if(enforce){
                this.showProgressDialogForPairing(false);
                this.fpForMessage = null;
                return true;
            }
            else {
                if (this.fpForMessage != null && this.fpForMessage.equals(fpForMessage)) {
                    Log.i(TAG, "hide进度提示框成功（fpForMessage == this.fpForMessage == "+fpForMessage+" ）。。。");
                    this.showProgressDialogForPairing(false);
                    this.fpForMessage = null;
                    return true;
                }
                else{
                    Log.i(TAG, "hide进度提示框失败，（fpForMessage != this.fpForMessage，fpForMessage=>"
                            +fpForMessage+"、this.fpForMessage=>"+this.fpForMessage+"）。。。");
                }
                return false;
            }
        }
        catch (Exception e){
            Log.w(TAG, e);
        }
        return false;
    }
}
